<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>


<script>
//     "\t// .env.development 环境变量",
//         "\t// 项目的代码中通过`process.env.VUE_APP_xxx`获取",
//         "\tVUE_APP_URL=http://autumnfish.cn/heimamm/public",





//         "//\t 保存token token封装",
//         "\t function saveLocal(key,value){",
//         "\t  window.localStorage.setItem(key,value)",
//         "\t }",

//         "\t // // 获取token",
//         "\t function getLocal (key){",
//         "return window.localStorage.getItem(key)",
//         "\t }",

//         "\t //删除token",
//         "\t function removeLocal(key){",
//         "\t   window.localStorage.removeItem(key)",
//         "\t }",

//         "\t export {saveLocal,getLocal,removeLocal}//统一暴露出去",



//         // "// 点击刷新验证码  时间戳"
//         // dianji() {
//         //     this.codeImg =
//         //         process.env.VUE_APP_URL + "/captcha?type=login&sdgsdg=" + Date.now(); //地址加上时间戳
//         // },






//         "\t//登录按钮的点击效验 "
//     "\t submit() {",
//         "\t this.$refs.form.,((result) => {",
//         "\t if (result) {",
//         "\t login(this.form).then((res) => {",
//         "\t // 1.保存token   2.提示信息   3.跳转页面",
//         "\t saveLocal('token', res.data.data.token)",
//         "\t this.$message.success('登陆成功');",
//         "\t this.$router.push('/layout');",
//         "\t // window.localStorage.setItem('token', res.data.data.token)",
//         "\t window.console.log(res);",
//         "\t });",
//         "\t } else {",
//         "\t this.$message.error('验证失败');",
//         "\t }",
//         "\t});",
//         "\t },",





//         " //    侦听器,检测某个值的变化",
//         "watch: {",
//         "isShow(newVal) {",
//         "if (newVal == false) {",
//         "//  清空表单  false就是发生改变, true就是没有发生改变,没有加上的话,每次写的数据都在上面,不清空,图片也不会及时加载上去,而是要等下次打开才加载出来",
//         "this.$refs.form.resetFields();",
//         "}",
//         "},",

//         "},",








//         " //rules 表单验证  长度控制,正则表达式",

//         "  { required: true, message: '请输入邮箱', trigger: 'change' },",
//         "{ min: 3, max: 8, message: '请输入3-8位字符', trigger: 'change' },",
//         " {",
//         "validator: (rule, value, callback) => {",
//         "let _reg = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;",
//         "if (_reg.test(value)) {",
//         " callback();",
//         " } else {",
//         " callback(new Error('请正确输入邮箱地址')); //失败弹出消息提示",
//         "}",
//         "},",
//         "trigger: 'change', //blue要失去焦点才会提示,change是键盘按下了就会一直提示",
//         '},',



//         "import { Message } from 'element-ui' // Message===this.$message",
//         " import { getLocal, removeLocal } from '@/utils/local.js'",
//         "// 导入路由",
//         "import router from '@/router/index.js'",
//         " import axios from 'axios'",

//         " let _fetch = axios.create({//axios实例化对象,axios加请求和响应的需求,赋值给_fetch",
//         " baseURL: process.env.VUE_APP_URL,",
//         " withCredentials: true   //Vue在发起跨域请求时，后端已经开启CORS，前端需要也携带cookie，此时需要在前端请求头加上withCredentials: true，表示请求可以携带cookie",
//         "  })",

//         "// 添加请求拦截器",
//         " _fetch.interceptors.request.use(",
//         "function (config) {",
//         "// 在发送请求之前做些什么",
//         " window.console.log('config', config)",
//         " config.headers.token = getLocal('token')",
//         "return config",
//         "},",
//         " function (error) {",
//         " // 对请求错误做些什么",
//         "  return Promise.reject(error)",
//         " }",
//         " )",

//         "// 添加响应拦截器",
//         " _fetch.interceptors.response.use(",
//         " function (response) {",
//         "// 对响应数据做点什么",
//         " // 把所有错误统一处理",
//         "if (response.data.code == 200) {",
//         " // 如果服务器返回的数据(code如果等于200就表示成功)",
//         "return response",
//         "} else if (response.data.code == 206) {",
//         "// 如果没有token(状态码)就会走这个条件,抛出异常,需要用户重新登录(主体页面,退出登录用到)",
//         "Message.error(response.data.message)",
//         "//1 删除token 2:跳转至登陆页",
//         "removeLocal('token')",
//         " router.push('/login') // this.$router== 相当于router的实例对像",
//         "return Promise.reject(response.data.message)",
//         "} else {",
//         "// 这里是Elment-ul提示框",
//         " Message.error(response.data.message)",
//         "//   alert(response.data.message)",
//         "//   对相应的数据做点什么(处理请求拦截与响应拦截)",
//         "return Promise.reject(response.data.message)",
//         " }",
//         "},",
//         " function (error) {",
//         "// 对响应错误做点什么",
//         " return Promise.reject(error)",
//         " }",
//         "  )",
//         "export default _fetch",


//       " //登录全局验证",
//         "loginClick() {",
//       "window.console.log(this.form);",
//       "this.$refs.form.validate(result => {",
//         "window.console.log(result);",
//         "if (result) {",
//           "toLogin(this.form).then(res => {",
//            " window.console.log(res);",
//            " this.$message.success('登陆成功');",
//           "});",
//        " }",
//      " });",
//     "},",




//     "let router = new VueRouter({"
//     "routes:"
//        " { path: '/', redirect: '/login' },//路由重定向"
//      "   {"
//             "path: '/login', component: login, meta: {"
//                 "title: '登录',"
//                " roles: ['超级管理员', '管理员', '老师', '学生']"
//             "}"
//        " },"
//         "{"
//            " path: '/layout', component: layout, redirect: '/layout/chart',  //路由重定向"
//            " children: [  //meta:{title:'数据概览'}meta的作用可以使每个路由对应的页面显示相对应自己定义的标题"
//                " { path: '/layout/chart', component: chart, meta: { icon: 'el-icon-pie-chart', title: '数据概览', roles: ['超级管理员', '管理员', '老师'] } },  //数据列表     写完整地址 path: '/layout/chart' 是为了不引起不必要的错误"


//        " },"

//     "]"
//    " git冲突解决",

// "1. 拉取冲突  git pull ",
//   " 1. 你本地修改了一个文件，你同事也修改了该文件，它先提交的",
//   " 2. 还原你的修改  git pull完成后再修改提交就没问题了",
// "2. 提交冲突",
//   " 1. git pull" ,
//    "2. git add .   git commit -m'123'   app.vue",
//    "3. git push 冲突",
//    "4. 还原你的修改 git pull 再来修改再提交",
// "3. 合并冲突",
//   " 1. master修改了App.vue",
//    "2. 我又在layout修改了App.vue,",
//   " 3. 我现在执行merge就冲突了",





// "1. 复制出冲突文件到单独文件夹",

// "2. 回到合并前状态  git merge --abort",

// "3. 复制出master分支冲突文件",

// "4. 切换到layout复制出冲突文件",

// "5. 复制master冲突文件粘贴 到layout分支，再提交代码",

// "6. 切换到master进行合并",



//   " ：wq",

//  " git push",

// "7：解决冲突文件后，复制至master替换提交",

// "8：在layout分支也进行替换提交",

// "9：合并master到layout  git merge master",


// methods: {
//     getDate() {
//       //学科列表的所有数据,少了两个关键的数据是页容量和页码,解决冗余,封装起来,后面页码和页容量发生改变调用,...this.form连接数组后面加两个参数
//       let _query = {
//         ...this.form,
//         page: this.pagination.currentPage,//页码
//         limit: this.pagination.pageSize,//页容量
//       };
//       getSubjectList(_query).then((res) => {
//         this.list = res.data.data.items;
//         // window.console.log("学科列表数据:", res);//created是初始化钩子,每次打印都在最前面
//         this.pagination.total = res.data.data.pagination.total; //接口返回总条数和分页条数关联
//       });
//     },

//     // 页容量改变
//     handleSizeChange(size) { //size page 饿了么内部帮助封装了,直接用一个参数接收就好了
//       //页容量改变和页码改变,上面写了下面就要用,不然会引起报错    ()里面的参数可以随便传,但是规范就好
//       // window.console.log("当前页容量", size);
//       // window.console.log("pageSize:", this.pagination.pageSize);
//       this.pagination.pageSize = size;
//       this.getDate(); //页容量改变了就要调用接口
//       this.pagination.currentPage = 1; //如果没有那么多10条/页,就默认返回第一页的数据
//     },
//     //页码改变
//     handleCurrentChange(page) {
//       // window.console.log("页码改变:", page);
//       this.pagination.currentPage = page; //点击页码发生了改变
//       // window.console.log(this.pagination.currentPage);
//       this.getDate(); //页面改变后调用接口,页面数据也要改变
//     },
//     //搜索功能
//     search() {
//       this.pagination.currentPage = 1;
//       this.getDate();
//     },
//     //清除功能
//     reset() {
//       //调用el-form上的一个resetFields方法   1：el-form来一个ref   2:this.$refs.ref值.resetFields() 3:在需要清除的表单项来一个prop绑定
//       //prop
//       this.$refs.form.resetFields();
//     },
//     // 设置状态
//     setStatus(id) {
//       //易错点,必须上面带了参数,这里也要写参数id
//       getSubjectStatus({ id: id }).then(() => {
//         //只有正确的才能进入到这里,所以不用知道得到什么
//         this.$message.success("状态设置成功");
//         //  设置成功后,刷新数据
//         this.getDate();
//       });
//     },
//     //新增学科,点击弹框
//     add() {
//       // 设置subjectAdd里面的isShow哦true
//       // 父传子   1：在子组件标签上定义一个ref  2:拿到子组件this==this.$refs.ref值
//       this.$refs.subjectAdd.isShow = true;
//        this.$refs.subjectAdd.mode = 'add'
//     },
//     //刪除功能
//     remove(id) {
//       // 提示一下
//       this.$confirm("您确定删除该项数据吗？", "提示", {
//         confirmButtonText: "确定删除",
//         cancelButtonText: "取消删除",
//         type: "warning",
//       })
//         .then(() => {
//           // 点击了确定删除
//           getSubjectRemove({ id }).then(() => {
//             // 提示成功
//             this.$message.success("删除成功");
//             // 刷新 数据
//             this.search();
//           });
//         })
//         .catch(() => {});
//     },
//     //編輯功能
//     edit(row) {
//       //传递row给新增组件的form字段
//       //父传子 1.在子组件标签定义一个ref   2.拿到新增组件的this
//       //这样转换是取消点击打开编辑,编辑的数据跟页面数据同步,取消了也不会让页面受到影响
//       this.$refs.subjectAdd.form = JSON.parse(JSON.stringify(row))
//       this.$refs.subjectAdd.mode = 'edit'
//       // 打开弹窗组件
//       this.$refs.subjectAdd.isShow = true

//       /*
//       引用值和原始值
//       引用值：对象，数组，function
//       var obj={xxx:1}
//       var form=obj   
//       form.xxx=2
//       obj.xxx=2
//       深拷贝   form=JSON.parse(JSON.stringify(obj))


//       */
//     },
//   },




</script>